<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script type="text/javascript">
    /*
     *call()和apply()
     *这两个方法都是函数对象的方法，需要通过函数对象来调用
     *党对函数调用call()和apply()都会调用函数执行
     *在调用call()和apply()可以将一个对象指定为第一个参数
     *此时这个对象将会成为函数执行时的this
     *call()方法可以将实参在对象之后依次传递
     *但是apply()方法需要将实参封装到一个数组中统一传递
     *this的情况
     *1.以函数形式调用时，this永远都是window
     *2.以方法的形式调用时，this是调用方法的对象
     *3.以构造函数的形式调用时，this是指定的那个对象
     *4.使用call和apply调用时，this是指定的那个对象
     */
    function fun(a,b)
    {
        console.log(a);
        console.log(b);
        console.log(this.name);
    }
    var obj={name:"obj1"};
    var arr=[2,3]
    fun.call(obj,2,3);
    fun.apply(obj,arr);
    console.log(obj);
    console.log(arr);
    
    //fun.call();
    //fun.apply();
    //fun();
    //上面三行代码效果一样
    
    
    //var obj2={name:"obj2"};
    //fun.call(obj);
    //此时输出的是objcet objcet 
    //如果不设定第一参数是obj，而是直接调用fun()，那么输出的则是object window
    </script>
</head>
<body>
    
</body>
</html>